package com.itheima.controller;

import com.itheima.pojo.StaffPage;
import com.itheima.utils.JwtUtils;
import com.itheima.pojo.Staff;
import com.itheima.common.R;
import com.itheima.service.StaffService;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Envy
 */
@Slf4j
@RestController
@RequestMapping(value = "/employee")
public class StaffController {
    @Resource
    private StaffService staffService;
    @Resource
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 登录功能
     */
    @PostMapping("/login")
    public R<Staff> login(@RequestBody Staff staff) {
        // 1.使用用户名和密码查询用户
        staff = staffService.login(staff);

        // 2.判断用户是否存在
        if (staff != null) {
            // 2.1.存在就获取token，
            Map<String, String> payload = new HashMap<>();
            // 只放userName,不要存放敏感信息，客户端可以解密
            payload.put("username", staff.getUsername());
            String token = JwtUtils.getToken(payload);
            //2.2并且把token放入用户对象中
            staff.setToken(token);
            //2.3 返回对象
            return R.success(staff);
        }
        return R.error("用户不存在或账号密码错误");
    }

    /**
     * 登出功能
     */
    @PostMapping("/logout")
    public R<String> quit() {
        redisTemplate.delete("token");
        return R.success("退出成功");
    }


    /**
     * 新增员工
     */
    @PostMapping()
    public R<Staff> addStaff(@RequestBody Staff staff) {
        //获取时间戳,将时间戳作为id
        long timeMillis = System.currentTimeMillis();
        String id = timeMillis + "";
        staff.setId(id);

        try {
            int i = staffService.addStaff(staff);
            if (i != 0) {
                return R.success(staff);
            }
        } catch (Exception e) {
            System.out.println("用户新增=============bug");
        }
        return R.error("用户名已存在，请重新输入");
    }

    /**
     * 分页查询员工
     */
    @GetMapping("/page")
    public R<StaffPage> pageQuery(@Param("name") String name, @Param("page") Integer page, @Param("pageSize") Integer pageSize) {
        Integer pageMin = (page - 1) * pageSize;
        return staffService.pageQuery(name, pageMin, pageSize);
    }

    /**
     * 根据id查询
     */
    @GetMapping("/{id}")
    public R<Staff> selectInfo(@PathVariable String id) {
        //调用方法 使用id查询用户信息id
        Staff staff = staffService.selectInfo(id);
        //判断返回对象是否为空
        if (staff != null) {
            return R.success(staff);
        } else {
            return R.error("查无此人");
        }
    }

    /**
     * 修改员工信息
     */
    @PutMapping()
    public R<Object> update(@RequestBody Staff staff) {
        log.info(staff.toString());
        //调用修改方法修改数据
        int update = staffService.update(staff);
        if (update != 0) {
            return R.success("修改成功");
        }
        return R.error("修改失败");
    }
}